package com.baoyouqun.base.utils.EnumValidator;

import jakarta.validation.ConstraintValidator;
import jakarta.validation.ConstraintValidatorContext;

public class EnumValueValidator implements ConstraintValidator<ValidEnum, Object> {

    private Class<? extends Enum<?>> enumClass;

    @Override
    public void initialize(ValidEnum constraintAnnotation) {
        this.enumClass = constraintAnnotation.enumClass();
    }

    @Override
    public boolean isValid(Object value, ConstraintValidatorContext context) {
        if (value == null) {
            // 允许null（如果需要非null约束，可添加@NotNull注解）
            return true;
        }
        // 1. 如果是String类型：校验是否为枚举的有效value（调用valueOfDbValue）
        if (value instanceof String) {
            return GenericEnumValidator.isValidEnum(enumClass, (String) value);
        }


        // 2. 如果是枚举类型：直接判断是否为目标枚举类的实例（枚举实例本身必然有效）
        return enumClass.isInstance(value);

        // 其他类型不支持
    }
}